PyVistaで ipygany を使う#
警告
現在,このバックエンドは pythreejs よりもサポートや機能が劣っています. three.jsでVTKのシーンを正確に再現したい場合には, PyVistaで pythreejs を使う をご覧ください.
ipygany jupyterlabプロットバックエンドは, pythreejs widget を介して threejs を活用した純粋なプロッティングを可能にする強力なモジュールです.(ここに示すように) HTMLドキュメントの埋め込み,( panel や itkwidgets などの他のクライアントjupyterlabプロットモジュールと比較して) 高速プロッティングを可能にします.
ipygany: Jupyter into the third dimension には優れたブロックポストがあり,ここではあまり繰り返しませんが, ipygany には以下の特徴があります.
IsoColor:メッシュにカラーマッピングを適用します.
Warp: 3 D入力データを与えられたメッシュを変形します (例えばビームの変位データ)
WarpByScalar: 1 D入力データを使用してメッシュを変形します(例えば地形標高)
Threshold: 一定範囲のデータ内のメッシュパーツのみを表示します(例えば222 K≦温度≦240 K)
IsoSurface: メッシュがデータ値を尊重するサーフェスのみを表示します(例えば pressure == 3 bar)
PointCloudのようなグリフ効果
水の可視化
PyVistaラッピング#
pyvista でipyganyを使用してプロットするには,2つの方法があります.1つは, ipygany の from_pyvista メソッドを使用してpyvistaメッシュ ipygany PolyMeshオブジェクト間で変換することで,さまざまな高度な ipygany メソッドを有効にし, ipygany Documentation で説明されている例に従うことです.もう1つは,既存の Plotter クラスを使用して jupyter_backend='ipygany' を設定する方法です.
おそらく最も良いのは,作成されたウィジェットをsphinxドキュメントに埋め込むことができることです.
import pyvista as pv
from pyvista import examples
mesh = examples.download_bunny()
pl = pv.Plotter()
pl.add_mesh(mesh, color='lightgrey')
pl.background_color = 'white'
pl.camera_position = 'xy'
pl.show(jupyter_backend='ipygany')
メッシュカラー,バックグラウンドカラー,カメラ位置がすべて ipygany シーンにマップされることに注意してください.つまり,既存のコードを再利用して,使用するプロットバックエンドのタイプに応じてバックエンドを変更できます.
すべてのvtkウィジェットを含む多くの機能が欠けていることに注意してください,しかし,これらの多くはjupyterlabウィジェットで置き換えることができます.独自のシーンをアセンブルする場合は,次のように "viewer" を返しながらjupyter_backendを変更します.
>>> pl = pv.Plotter()
>>> pl.add_mesh(mesh, color='lightgrey')
>>> pl.background_color = 'white'
>>> pl.camera_position = 'xy'
>>> scene = pl.show(jupyter_backend='ipygany', return_viewer=True)
>>> type(scene)
ipygany.ipygany.Scene
このシーンを任意の数のjupyterlabウィジェットに追加し,完全なウィジェットとして表示できます.例えば, ipywidgets.AppLayout を使用して2つを並べて表示することもできます.
例: 大規模モデル#
この例では,大きなメッシュを示し,500,000 万個の面と 250,000 個の点を含むCarburetorの例など非常に大きなメッシュでもすばやくロードできることを示します.このメッシュは約6 MBであるため,これは帯域幅に依存します.
import pyvista as pv
from pyvista import examples
pv.set_jupyter_backend('ipygany')
# download an example and reduce the mesh density
mesh = examples.download_carburator()
mesh.decimate(0.5, inplace=True)
# plot it on a white background with a lightgrey mesh color
mesh.plot(background='w', color='lightgrey')
シーンを戻します#
ipywidgets.TwoByTwoLayout を使っていくつかのウィジェットを同時に表示します.これは パラメトリックジオメトリオブジェクト に似ていますが,インタラクティブウィジェットがあります.
from ipywidgets import TwoByTwoLayout
import pyvista as pv
# consistent view options for all plotters
plot_kwargs = {'color': 'tan', 'jupyter_backend': 'ipygany',
'return_viewer': True, 'background': 'white'}
supertoroid = pv.ParametricSuperToroid(n1=0.5)
scene_0 = supertoroid.plot(**plot_kwargs)
ellipsoid = pv.ParametricEllipsoid(10, 5, 5)
scene_1 = ellipsoid.plot(**plot_kwargs)
pseudosphere = pv.ParametricPseudosphere()
scene_2 = pseudosphere.plot(**plot_kwargs)
conicspiral = pv.ParametricConicSpiral()
scene_3 = conicspiral.plot(**plot_kwargs)
TwoByTwoLayout(top_left=scene_0,
top_right=scene_1,
bottom_left=scene_2,
bottom_right=scene_3)
スカラバー#
スカラーバーは,プロットにアクティブなスカラーがある場合に自動的に表示されます.たとえば, active_scalar_name のSt.Helens mesh は 'Elevation' です.スカラバー,スカラバータイトル,カラーマップドロップダウンメニューは自動的にシーンに追加されます.
# Load St Helens DEM and warp the topography
mesh = examples.download_st_helens().warp_by_scalar()
pl = pv.Plotter()
pl.background_color = 'white'
pl.add_mesh(mesh)
pl.show()